Wprowadzenie
Klasa (class) jest szablonem obiektu. Dzięki niej możemy stworzyć wiele instancji (instance), które będą działać wedle tego szablonu.
Tworzenie klasy
Klasę tworzymy za pomocą słowa kluczowego class. Wewnątrz jej definicji możemy w skrótowy sposób deklarować jej metody (methods) bez użycia słowa function, jak pokazaliśmy w poniższym przykładzie.
Przy tworzeniu klasy, kluczowe jest wykorzystanie obiektu this, który reprezentuje pojedynczą instancję, czyli obiekt stworzony na podstawie klasy. Dzięki temu możemy danej instancji przypisywać właściwości (wartości, dane) oraz uruchamiać jej metody – zwykle odziedziczone z klasy. Dla łatwiejszego zrozumienia przykładów będziemy zapisywać obiekt this w stałej thisEmployee (ten pracownik).
Kolejnym charakterystycznym elementem klasy jest metoda constructor – ta funkcja jest uruchamiana zawsze w momencie tworzenia nowej instancji i służy do jej zainicjowania. Argumenty przekazane przy tworzeniu nowej instancji są dostępne wyłącznie w konstruktorze – dlatego ważne jest, aby zapisać je do właściwości instancji. Dzięki temu, te wartości będą dostępne w innych metodach.
class Employee{
constructor(name, age, yearlySalary){
const thisEmployee = this;
thisEmployee.name = name;
thisEmployee.age = age;
thisEmployee.yearlySalary =yearlySalary;
thisEmployee.calculateMonthlySalary();
}
calculateMonthlySalary(){
const thisEmployee = this;
thisEmployee.monthlySalary = thisEmployee.yearlySalary / 12;
}
showDetails(){
const thisEmployee = this;
console.log(thisEmployee.name, thisEmployee.age, thisEmployee.monthlySalary);
}
}Tworzenie instancji
Instancję klasy tworzymy za pomocą słowa kluczowego new, nazwy klasy, oraz argumentów przekazywanych do konstruktora klasy.
const john = new Employee('John Doe', 20, 12000);
console.log('john:', john);
// john: Employee {name: "John Doe", age: 20, yearlySalary: 12000, monthlySalary: 1000}
console.log('john.age:', john.age);
// john.age: 20
john.showDetails();
// 'John Doe', 20, 1000
const jane = new Employee('Jane Stevens', 35, 18000);
console.log('jane:', jane);
// jane: Employee {name: "Jane Stevens", age: 35, yearlySalary: 18000, monthlySalary: 1500}
console.log('jane.age:', jane.age);
// jane.age: 35
jane.showDetails();
// 'Jane Stevens', 35, 1500Zmiana właściwości instancji
Jak widzieliśmy w powyższym przykładzie, każda instancja ma własne właściwości. Możemy je dowolnie zmieniać, nie wpływając na pozostałe instancje.
console.log('john.age:', john.age);
// john.age: 20
console.log('jane.age:', jane.age);
// jane.age: 35
john.age++;
console.log('john.age:', john.age);
// john.age: 21 <== CHANGED
console.log('jane.age:', jane.age);
// jane.age: 35